package cn.biplam.front.template.control;

import java.util.ArrayList;

import cn.biplam.common.tools.TOOLS;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.front.html.HtmlValue;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.html.base.Const.Length_Unit;
import cn.biplam.front.template.base.ButtonImageText;
import cn.biplam.front.template.control.table.Table;

/**
 *  竖向菜单模板<BR>用于:左键弹出菜单或右键弹出菜单
 *  <UL>用法: 
 *  	 <li>创建     VerticalMenu(页面ID,记录ID)
 *       <li>放入项    put(图片路径,应用系统路径,标题文本,绑定脚本)
 *       <li>获取菜单  get()
 *  </UL>
 * @author XiaoRuxing Dec 8, 200911:15:39 AM
 * @version 1.0
 */
public class VerticalMenu {

	/**菜单id */
	private String sID;
	/** 菜单项容器 */
	private ArrayList<ButtonImageText> menuItems;
	/**菜单 */
	private Table menu;
	/** 模板宽度 */
	private int width = -1;
	/** 每项的最小字数 */
	private static final int minItemWordNumb = 4;
	private String recordId;
	
	/**
	 * 构造方法
	 * @param sID  调用者容器id(用来合成菜单id)
	 * @throws ErrorMessage 
	 */
	public VerticalMenu(String sID) throws ErrorMessage{
		this(sID,null);
	}
	
	/**
	 * 构造方法
	 * @param sID 调用者容器id(用来合成菜单id)
	 * @param rid 主键id
	 * @throws ErrorMessage 
	 */
	public VerticalMenu(String sID,String rid) throws ErrorMessage{
		this.sID = sID+"lm";
		this.recordId = rid;
		this.menuItems = new ArrayList<ButtonImageText>();
	}
	
	/**
	 * 取左键菜单ID
	 * @return 左键菜单ID
	 */
	public String getID(){
		return this.sID;
	}
	
	/**
	 * 设置菜单项到菜单容器中
	 * @param text 菜单项名称
	 * @param script 菜单项绑定的脚本
	 * @throws ErrorMessage
	 */
	public void put(String text,String script) throws ErrorMessage{
		ButtonImageText img = new ButtonImageText(null,text);
		img.setBind(script);
		this.menuItems.add(img);
	}
	
	/**
	 * 设置菜单项到菜单容器中
	 * @param pic 图片路径
	 * @param sHomeUrl 系统路径
	 * @param text 菜单项名称
	 * @param script 菜单项绑定的脚本
	 * @throws ErrorMessage
	 */
	public void put(String pic,String sHomeUrl,String text,String script) throws ErrorMessage{
		ButtonImageText img = new ButtonImageText(null,text,sHomeUrl,"/images/"+pic);
		img.setBind(script);
		this.menuItems.add(img);
	}
	

	/**
	 * 取菜单
	 * @return HtmlWindow
	 * @throws ErrorMessage 
	 */
	public HtmlWindow get() throws ErrorMessage{
		//创建菜单项
		create();
		putAddParams();//放入附加参数
		HtmlWindow mv = this.menu.get();
		//绑定显示效果
		mv.bind("trBind('"+mv.getID()+"');");
		return mv;
	}
	
	/**
	 *  放入附加参数
	 * @throws ErrorMessage 
	 */
	private void putAddParams() throws ErrorMessage{
		//放入主键
		if(this.recordId!=null){
			this.menu.putExtend(new HtmlValue(this.sID+"r",recordId));
		}
	}
	
	/**
	 *  创建菜单
	 */
	private void create() throws ErrorMessage{
		//创建表格
		this.menu = new Table(this.sID);
		int i = 0; //项计数器
		int width = 0; //项宽度
		int height =0;
		//遍历项容器放入项
		for(ButtonImageText item: this.menuItems){
			//设置项最小宽度
			item.setMinWords(minItemWordNumb);
			//放入项
			HtmlWindow curItem = item.get();
			curItem.setStyleWidth("100", Length_Unit.percent);
			curItem.setStyleHeight("100", Length_Unit.percent);
			this.menu.put(curItem,i);
			//如果当前项宽度大于最大宽度,设置最大宽度为当前宽度
			if(item.getWidth()>width){
				width = item.getWidth();
			}
			//设置高度
			height = height+18;
			//设置当前项样式
			this.menu.setColStyle(i, 0, "align", "left");//单元格内容左对齐
			i++;
		}
		//设置表格宽度 项最大宽度+单元格边框+表格边框+附加宽度
		this.width = width+2+2+10;
		this.menu.setWidth("100", Length_Unit.percent);
		this.menu.setClientWidth(TOOLS.intToString(this.width));
		this.menu.setBindViewScript(false);
	}
}
